/*
# File    :   xxtea.c
*/

/*
    XXTEA，又称Corrected Block TEA，是XTEA的升级版，设计者是Roger Needham, David Wheeler
 注意：delta的取值是随机的，但是为了避免不良的取值，采取的是黄金分割数（根号5－2）/2与2的32次方的乘积。为0x9e3779b9。   
在解密中，sum＝delta&TImes;round，如：delta&TImes;32＝13C6EF3720

*/     
#include "xxtea.h"
/*
 * btea 加解密
 * 参数
 *      v为要加密的数据
 *      n 的绝对值表示v的长度，取正表示加密，取负表示解密 
 *      key 加解密密钥，为4个32位无符号整数，即密钥长度为128位 
*/
void btea(unsigned int *v, int n, unsigned int const key[4])  
{  
    unsigned int y, z, sum;  
    unsigned p, rounds, e;  
    if (n > 1)            /* Coding Part */  
    {  
        rounds = 6 + 52/n;  
        sum = 0;  
        z = v[n-1];  
        do  
        {  
            sum += DELTA;  
            e = (sum >> 2) & 3;  
            for (p=0; p<n-1; p++)  
            {  
                y = v[p+1];  
                z = v[p] += MX;  
            }  
            y = v[0];  
            z = v[n-1] += MX;  
        }  
        while (--rounds);  
    }  
    else if (n < -1)      /* Decoding Part */  
    {  
        n = -n;  
        rounds = 6 + 52/n;  
        sum = rounds*DELTA;  
        y = v[0];  
        do  
        {  
            e = (sum >> 2) & 3;  
            for (p=n-1; p>0; p--)  
            {  
                z = v[p-1];  
                y = v[p] -= MX;  
            }  
            z = v[n-1];  
            y = v[0] -= MX;  
            sum -= DELTA;  
        }  
        while (--rounds);  
    }  
}

